/**
 * Author: Lipovcev Bogdan (seclan@mail.ru)
 * Version: 0.0.1
 * Requires: haxe>=v2.05, swf-version>=10
 */
  
/**
 * TODO: Для кадого экземпляра кнопки нужно создавать отдельные экземпляры картинок - это плохо
 */

import flash.text.TextField;
import flash.display.Sprite;
import flash.display.SimpleButton;
import flash.display.DisplayObject;

/// Надпись
class Label extends TextField{
	private var ts : flash.text.TextFormat;
	
	/**
	* Создаем новую надпись с заданными параметрами шрифта
	* ui_Color - цвет шрифта (0x000000)
	* s_FontName -  название шрифта (Vernada)
	* i_Size - размер шрифта в пикселях
	*/
	public function new( ?ui_Color: UInt=0x000000, ?s_FontName: String="Vernada", ?i_Size: Int=10) {
		super();
		this.mouseEnabled = false;
        ts = new flash.text.TextFormat();
        ts.color= ui_Color;
        ts.size= i_Size;
        ts.font = s_FontName;
        this.setTextFormat(ts);
        flash.Lib.current.addChild(this);
	}
	
	/**
	* Устанавливает текст в надпись
	* text - собственно сам текст
	*/
	public function SetText(text : String):Void {
		this.text= text;
		this.setTextFormat(ts);
	}
	
	/**
	* Установить текст по заданным координатам
	* x - x координата (от левого верхнего угла)
	* y - y координата (от левого верхнего угла)
	*/
	public function SetXY(?xx : Float=0, ?yy : Float=0):Void {
		this.x = xx;
		this.y = yy;
	}
}

/// Кнопка с текстом
class MyButton extends Sprite {
	/**
	* Объявляем классы надписи и кнопки
	*/
	private var lbl : Label;
	private var but : SimpleButton;

	/**
	* Коструктор: задаем надписи и кнопке нужные параметры, устанавливаем кнопку в нужное место и задаем текст на кнопке
	* mupState - обычная картинка кнопки
	* moverState - картинка при наведении на кнопку
	* mdownState - картинка при клике на кнопку
	* mhitTestState - картинка когда кнопка будет отпущена
	* ?ix - координата х кнопки
	* ?iy - координата у кнопки
	* ?color - цвет текста кнопки (0xFFFFFF)
	* ?font - ширфт текста (Vernada)
	* ?size - размер текста в px
	* ? label - сама надпись на кнопке
	*/
	public function new(mupState : DisplayObject, moverState : DisplayObject, mdownState : DisplayObject, mhitTestState : DisplayObject, ?ix : Float=0, ?iy : Float=0, ?color : UInt=0x0000FF, ?font : String="Vernada", ?size:Int=15, ?label: String) {	
		super();
		lbl = new Label(0x0000FF, "Vernada", 15);
		but = new SimpleButton(mupState, moverState, mdownState, mhitTestState);
		SetXY(ix, iy);
		SetText(label);
	}
	
	/**
	* Установить кнопку по заданным координатам xx,yy
	*/
	public function SetXY(?xx : Float=0, ?yy : Float=0):Void {
		x = xx;
		y = yy;
	}
	
	/**
	 * Установить текст sStr в центр кнопки
	 */
	public function SetText(sStr:String){
		lbl.SetText(sStr);
		lbl.SetXY((but.x+but.width/2-lbl.textWidth/2), (but.y+but.height/2-lbl.textHeight/2));
		this.addChild(but);
		this.addChild(lbl);
	}
}